var Busqueda = function () {

return { 
init: function () {

			var idEjemplar = '';
			
			var busqueda = new Ext.form.FormPanel({
				frame: true,
				autoHeight: true,
				padding: 20,
				defaultType: 'textfield',
				//border: false,
				autoWidth: true,
				//title: '<font face="arial" size=4 >Criterios de Busqueda</font>',
				title: 'Criterios de Busqueda',
				labelWidth: 170,
				renderTo: 'busqueda',
				//buttonAlign: 'center',
				xtype: 'fieldset',
				items: [
					{fieldLabel: '<font face="arial" size=2 >Buscar por Isbn</font>', height: 25, emptyText: 'ingrese el codigo isbn', anchor: '100%', id: 'IDIsbnBusqueda'},
					{xtype: 'label', html: '<br />'},
					{fieldLabel: '<font face="arial" size=2 >Buscar por Titulo</font>', emptyText: 'ingrese el titulo del ejemplar', height: 25, anchor: '100%', id: 'IDTituloBusqueda'},
					{xtype: 'label', html: '<br />'},
					{xtype: 'compositefield', fieldLabel: '<font face="arial" size=2 >Buscar por Autor</font>', msgTarget : 'side', anchor: '100%', height: 25, defaults: {flex: 1 },
						items: [
							{
								xtype: 'textfield',
								id: 'IDPrimerApellidoBusqueda',
								emptyText: 'primer apellido',
								height: 25
							},
							{
								xtype: 'textfield',
								id: 'IDSegundoApellidoBusqueda',
								emptyText: 'segundo apellido',
								height: 25
							},
							{
								xtype: 'textfield',
								id: 'IDPrimerNombreBusqueda',
								emptyText: 'primer nombre',
								height: 25
							},
							{
								xtype: 'textfield',
								id: 'IDSegundoNombreBusqueda',
								emptyText: 'segundo nombre',
								height: 25
							}
						]
					},
					{xtype: 'label', html: '<br />'},
					{fieldLabel: '<font face="arial" size=2 >Buscar por Palabra Clave</font>', emptyText: 'ingrese la palabra clave', height: 25, anchor: '100%', id: 'IDPalabraClaveBusqueda'}
				],
				buttons:[
				  {text: '<font face="arial" size=3 >Buscar</font>', 
				   id:'BbuscarBusqueda',
				   scale: 'large',
				   height: 25,
				   width: 100,
				   iconCls:'go32',
				   handler: function(){
						if(Ext.getCmp('IDIsbnBusqueda').getValue() == '' && Ext.getCmp('IDTituloBusqueda').getValue() == '' && 
						Ext.getCmp('IDPrimerNombreBusqueda').getValue() == '' && Ext.getCmp('IDSegundoNombreBusqueda').getValue() == '' && 
						Ext.getCmp('IDPrimerApellidoBusqueda').getValue() == '' && Ext.getCmp('IDSegundoApellidoBusqueda').getValue() == '' && 
						Ext.getCmp('IDPalabraClaveBusqueda').getValue() == ''){
							Ext.example.msg('Aviso', 'Ingrese un campo de busqueda');
						}
						else{
							busqueda.hide();
							gridLibros.render('busquedaGrid');
							gridLibros.show();
							viewGrid.collapseAllGroups();
							BusquedaLibroDataStore.load({
									params: {
										Isbn: Ext.getCmp('IDIsbnBusqueda').getValue(), 
										Titulo: Ext.getCmp('IDTituloBusqueda').getValue(),
										PrimerNombre: Ext.getCmp('IDPrimerNombreBusqueda').getValue(),
										SegundoNombre: Ext.getCmp('IDSegundoNombreBusqueda').getValue(),
										PrimerApellido: Ext.getCmp('IDPrimerApellidoBusqueda').getValue(),
										SegundoApellido: Ext.getCmp('IDSegundoApellidoBusqueda').getValue(),
										PalabraClave: Ext.getCmp('IDPalabraClaveBusqueda').getValue(),
										start: 0, 
										limit: 20
									}
							});
						}
				   }
				  }
				]
			});
			
			var BusquedaLibroDataStore = new Ext.data.GroupingStore({
				id: 'BusquedaLibroDataStore',
				proxy: new Ext.data.HttpProxy({
					url: 'BUSQUEDA/listar', 
					method: 'POST'
				}),
				root: 'results',
				//baseParams:{Busqueda:'', Campo:''},
				totalProperty: 'total',
				reader:new Ext.data.JsonReader({
						root:'results',
						totalProperty:'total'
					},
					[
						{name: 'ejemplarIsbn', type: 'string'},
						{name: 'ejemplarTitulo', type: 'string'},
						{name: 'ejemplarAnoPublicacion', type: 'string'},
						{name: 'ejemplarIdioma', type: 'string'},
						{name: 'ejemplarAreaConocimientoCodigo', type: 'string'},
						{name: 'ejemplarAreaConocimientoNombre', type: 'string'},
						{name: 'ejemplarEditorialNombre', type: 'string'},
						{name: 'ejemplarEditorialCodigo', type: 'string'},
						{name: 'ejemplarAutoresCodigos', type: 'string'},
						{name: 'ejemplarAutoresNombres', type: 'string'},
						{name: 'ejemplarPalabrasClaveCodigos', type: 'string'},
						{name: 'ejemplarPalabrasClaveNombres', type: 'string'},
						{name: 'ejemplarEstado', type: 'string'},
						{name: 'ejemplarId', type: 'string'}
					]
				),
				sortInfo:{field: 'ejemplarIsbn', direction: 'ASC'},
				groupField: 'ejemplarTitulo'
			});
			//BusquedaLibroDataStore.load({params: {start: 0, limit: 20}});

			var accesibilidadGroupBusqueda = new Ext.ButtonGroup({
				columns: 1,
				title: 'Accesibilidad',
				items: [{
					text: '<font face="arial" size=2 color=black>Ajustar</font>',
					scale: 'large',
					rowspan: 3, 
					iconCls: 'ajustar',
					handler: function(){
								
							}
				},{
					xtype:'splitbutton',
					text: '<font face="arial" size=2 color=black>Temas</font>',
					scale: 'large',
					//rowspan: 3,
					iconCls: 'temas',
					menu: [
							{text: 'access', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-access.css');}},
							{text: 'black', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-black.css');}},
							{text: 'blue', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-blue.css');}},
							{text: 'chocolate', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-chocolate.css');}},
							{text: 'gray', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-gray.css');}},
							{text: 'green', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-green.css');}},
							{text: 'indigo', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-indigo.css');}},
							{text: 'midnight', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-midnight.css');}},
							{text: 'olive', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-olive.css');}},
							{text: 'peppermint', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-peppermint.css');}},
							{text: 'purple', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-purple.css');}},
							{text: 'red', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-red.css');}},
							{text: 'silverCherry', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-silverCherry.css');}},
							{text: 'slickness', iconCls: 'buscar', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-slickness.css');}},
							{text: 'slate', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-slate.css');}},
							{text: 'vista', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-vista.css');}}
					]
				}]
			});
			
			var busquedaGroupBusqueda = new Ext.ButtonGroup({
				columns: 3,
				title: 'Opciones de busqueda',
				items: [{
					xtype:'splitbutton',
					text: '<font face="arial" size=2 color=black>Agrupar</font>',
					scale: 'large',
					iconCls: 'agrupar',
					colspan: 1,
					menu: [
							{text: 'Isbn', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.groupBy('ejemplarIsbn');}},
							{text: 'Titulo', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.groupBy('ejemplarTitulo');}},
							{text: 'Ano de Publicacion', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.groupBy('ejemplarAnoPublicacion');}},
							{text: 'Idioma', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.groupBy('ejemplarIdioma');}},
							{text: 'Area de conocimiento', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.groupBy('ejemplarAreaConocimientoNombre');}},
							{text: 'Editorial', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.groupBy('ejemplarEditorialNombre');}},
							{text: 'Autores', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.groupBy('ejemplarAutoresNombres');}},
							{text: 'Palabras Clave', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.groupBy('ejemplarPalabrasClaveNombres');}},
							{text: 'No agrupar', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.clearGrouping();}}
						  ],
					
				},{
					xtype:'splitbutton',
					text: '<font face="arial" size=2 color=black>Ordenar</font>',
					scale: 'large',
					iconCls: 'ordenar',
					colspan: 1,
					menu: [
							{text: 'Isbn', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.sort('ejemplarIsbn');}},
							{text: 'Titulo', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.sort('ejemplarTitulo');}},
							{text: 'Ano de Publicacion', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.sort('ejemplarAnoPublicacion');}},
							{text: 'Idioma', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.sort('ejemplarIdioma');}},
							{text: 'Area de conocimiento', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.sort('ejemplarAreaConocimientoNombre');}},
							{text: 'Editorial', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.sort('ejemplarEditorialNombre');}},
							{text: 'Autores', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.sort('ejemplarAutoresNombres');}},
							{text: 'Palabras Clave', iconCls: 'item', handler: function(){ BusquedaLibroDataStore.sort('ejemplarPalabrasClaveNombres');}}
						  ],
				}]
			});
			
			var winAyudaEjemplar = new Ext.Window({
				title: 'Ayuda',
				closable: false,
				width: 380,
				modal: true,
				height: 280,
				items: [{ html: '<p>Aqui pongo lo de la ayuda</p>'}],
				buttons: [ {text:'Aceptar', iconCls:'agregar', handler: function(){ winAyudaEjemplar.hide();}}]
			});
			
			var ayudaGroupEjemplar = new Ext.ButtonGroup({
				columns: 1,
				title: 'Ayuda',
				items: [{
					text: '<font face="arial" size=2 color=black>Ayuda</font>',
					scale: 'large',
					rowspan: 1, 
					iconCls: 'ayuda',
					handler: function(){
								winAyudaEjemplar.show();
							}
				}]
			});
			
			var regresarGroupEjemplar = new Ext.ButtonGroup({
				columns: 1,
				title: 'Regresar a busqueda',
				items: [{text: '<font face="arial" size=2 >Regresar</font>', 
						   //id:'BbuscarBusqueda',
						   scale: 'large',
						   width: 120,
						   iconCls: 'back32',
						   handler: function(){
								busqueda.show();
								gridLibros.hide();
						   }
				  }]
			});
			
			var reservarGroupEjemplar = new Ext.ButtonGroup({
				columns: 1,
				title: 'Reservar',
				items: [{text: '<font face="arial" size=2 >Reservar</font>', 
						   //id:'BbuscarBusqueda',
						   scale: 'large',
						   iconCls: 'select32',
						   handler: function(){
								if(idEjemplar != ''){
									if(estadoEjemplar == 'Disponible'){
										reservar();
									}
									else{
										Ext.example.msg('Alerta', 'No se puede reservar este libro');
									}
								}
						   }
				  }]
			});
			
			var expanderLibro = new Ext.ux.grid.RowExpander({
				tpl : new Ext.Template(
					//'<p><b>Isbn:</b> {ejemplarIsbn} <b>Titulo:</b> {ejemplarTitulo}</p>', // si funciona!!!!!!!!!!!!
					'<p><b>ID Ejemplar:</b> {ejemplarId}</p>',
					'<p><b>Isbn:</b> {ejemplarIsbn}</p>',
					'<p><b>Titulo:</b> {ejemplarTitulo}</p>',
					'<p><b>Estado:</b> {ejemplarEstado}</p>',
					'<p><b>Area de Conocimiento:</b> {ejemplarAreaConocimientoNombre}</p>',
					'<p><b>Autores:</b> {ejemplarAutoresNombres}</p>',
					'<p><b>Editorial:</b> {ejemplarEditorialNombre}</p>',
					'<p><b>Ano publicacion:</b> {ejemplarAnoPublicacion}</p>',
					'<p><b>Idioma:</b> {ejemplarIdioma}</p>',
					'<p><b>Palabras clave:</b> {ejemplarPalabrasClaveNombres}</p>'
				)
			});
			
			var viewGrid = new Ext.grid.GroupingView({
					hideGroupedColumn: true,
					startCollapsed : true
			});
			
			var gridLibros = new Ext.grid.GridPanel({
				store: BusquedaLibroDataStore,
				hidden: true,
				columns: [
					expanderLibro,
					{header: 'ID Ejemplar', width: 100, sortable: true, dataIndex: 'ejemplarId'},
					{header: 'ISBN', width: 100, sortable: true, dataIndex: 'ejemplarIsbn'},
					{header: 'Titulo', width: 400, sortable: true, dataIndex: 'ejemplarTitulo'},
					{header: 'Estado', width: 100, sortable: true, dataIndex: 'ejemplarEstado'},
					{header: 'Area de Conocimiento', width: 130, sortable: true, dataIndex: 'ejemplarAreaConocimientoNombre'},
					{header: 'Ano de Publicacion', width: 110, sortable: true, dataIndex: 'ejemplarAnoPublicacion', hidden: true},
					{header: 'Idioma', width: 100, sortable: true, dataIndex: 'ejemplarIdioma', hidden: true},
					{header: 'Area de Conocimiento', width: 125, sortable: true, dataIndex: 'ejemplarAreaConocimientoNombre', hidden: true},
					{header: 'Editorial', width: 125, sortable: true, dataIndex: 'ejemplarEditorialNombre', hidden: true},
					{header: 'Autores', width: 250, id:'IDBusquedaAutores', sortable: true, dataIndex: 'ejemplarAutoresNombres'},
					{header: 'Palabras Clave', width: 180, sortable: true, dataIndex: 'ejemplarPalabrasClaveNombres', hidden: true}
				],
				sm: new Ext.grid.RowSelectionModel({
					singleSelect: true,
					listeners: {
						rowselect: function(sm, row, rec) {
							idEjemplar = rec.get('ejemplarId');
							estadoEjemplar = rec.get('ejemplarEstado');
						}
					}
				}),
				plugins: [expanderLibro],
				tbar: [reservarGroupEjemplar, busquedaGroupBusqueda, accesibilidadGroupBusqueda, ayudaGroupEjemplar, '->', regresarGroupEjemplar],
				stripeRows: true,
				columnLines: true,
				autoExpandColumn: 'IDBusquedaAutores',
				autoHeight: true,
				autoWidth: true,
				//renderTo: 'busquedaGrid',
				title: '<font face="arial" size=2>Datos de Libros</font>',
				stateful: true,
				stateId: 'grid',
				bbar: new Ext.PagingToolbar({
					pageSize: 20,
					store: BusquedaLibroDataStore,
					displayInfo: true,
					displayMsg: 'Mostrando {0} - {1} de {2} Libros',
					emptyMsg: '<font face="arial" size=2>No hay Libros</font>',
					//items:[]
				}),
				viewConfig: {
					forceFit: true
				}, 
				view: viewGrid
			});
			
			function reservar(){
				Ext.Ajax.request({  
				waitMsg: 'Espere por favor',
				url: 'BUSQUEDA/reservar', 
				params: {
					IdEjemplar: idEjemplar
				},
				success: function(response, action){	  
					obj = Ext.util.JSON.decode(response.responseText);
					if (obj.success)
					{
						Ext.Msg.alert('Alerta', obj.mensaje);
						BusquedaLibroDataStore.load({
								params: {
									Isbn: Ext.getCmp('IDIsbnBusqueda').getValue(), 
									Titulo: Ext.getCmp('IDTituloBusqueda').getValue(),
									PrimerNombre: Ext.getCmp('IDPrimerNombreBusqueda').getValue(),
									SegundoNombre: Ext.getCmp('IDSegundoNombreBusqueda').getValue(),
									PrimerApellido: Ext.getCmp('IDPrimerApellidoBusqueda').getValue(),
									SegundoApellido: Ext.getCmp('IDSegundoApellidoBusqueda').getValue(),
									PalabraClave: Ext.getCmp('IDPalabraClaveBusqueda').getValue(),
									start: 0, 
									limit: 20
								}
						});
						//Ext.example.msg('Alerta', obj.mensaje);
					}	
					else if (obj.success == false)
					{
						Ext.example.msg('Error', obj.errors.reason);
					}
				},
				failure: function(response){
					var result=response.responseText;
					Ext.example.msg('Error', 'no se pudo conectar a la base de datos intente mas tarde'); 
				}
				});
			}
		}
	}
}();